package RedBook;

import java.util.Scanner;
//小明数列
//        时间限制： 3000MS
//        内存限制： 589824KB
//        题目描述：
//        小明了解了递归函数，十分喜欢递归这一概念。他用递归的概念定义了一个数列{an}，其中a0和a1均为1，对于i≥2，
//
//        ai=ai-1*A+ai-2*B。递归定义让小明十分开心，但是算起来却很痛苦，现在小明想让你帮他算一算。考虑到数列可能很大，小明觉得你告诉他对应项模上M之后的答案就可以了（数列中的每一个数叫做这个数列的项）。
//
//
//
//        输入描述
//        第一行三个数A，B，M，含义见题面。
//
//        接下来一行一个数Q，表示小明询问次数。
//
//        接下来一行Q个数q1,q2,...,qQ，第i个数qi表示小明第i次询问数列第qi项模上数字M后的答案。
//
//        对于所有数据，1≤Q,qi≤50000，1≤A,B,M≤108
public class Test1 {


    public  void  arrayTest(int  A,int B,int M){

if (A<1||A>100000000||B<1||B>100000000||M<1||M>100000000){
    System.out.println("输入的参数不合法");
    return;
}
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入询问次数：");
      while (scanner.hasNext()){
          int times = scanner.nextInt();
          if (times>50000||times<1){
              System.out.println("输入的询问次数不合法！！请重新输入");
          }
          int[] arr=new int[times+2];

          for (int i = 0; i < times+2; i++) {
              arr[i]=countArrayIndex(A,B,i)%M;
          }
          for (int i = 2; i <times+2 ; i++) {
              System.out.print(arr[i]+" ");

          }

      }


    }

    public  int  countArrayIndex(int A,int B,int times){
        if (times==0){
            return 0;
        }
        if (times==1||times==2){
           return 1;
        }
        return A*countArrayIndex(A,B,times-1)+B*countArrayIndex(A,B,times-2);
    }

    public static void main(String[] args) {
        Test1 test1 = new Test1();
        test1.arrayTest(1,1,4);
    }

}
